
import java.awt.*;

/**
 * 底层地图
 *
 */
public class MapBottom {
    BottomRay bottomRay=new BottomRay();
    void dfs(int x,int y){
        if(GameUtil.sure(x,y)==false||GameUtil.MAP_TOP[x][y]!=1) return;
        if(GameUtil.mp[x][y]>=1) GameUtil.MAP_TOP[x][y]=0;
        if(GameUtil.mp[x][y]!=0) return;
        GameUtil.MAP_TOP[x][y]=0;
        for(int i=-1;i<=1;i++)
            for(int j=-1;j<=1;j++)
                dfs(x+i,y+j);
    }
    void mouse(){
        int tmpx=GameUtil.MAP_W(GameUtil.MOUSE_X);
        int tmpy=GameUtil.MAP_H(GameUtil.MOUSE_Y);
        if(GameUtil.sure(tmpx,tmpy)) {
            if (GameUtil.LEFT) {
                dfs(tmpx,tmpy);
                if(GameUtil.mp[tmpx][tmpy]==-1) GameUtil.state=2;
                GameUtil.MAP_TOP[tmpx][tmpy]=0;
                GameUtil.LEFT = false;
            } else if (GameUtil.RIGHT) {
                int tmp=GameUtil.MAP_TOP[tmpx][tmpy];
                if(tmp==0 && GameUtil.mp[tmpx][tmpy]!=0){        //右键已开点
                    int sum=0;
                    for(int i=-1;i<=1;i++)
                        for(int j=-1;j<=1;j++)
                            if(GameUtil.sure(tmpx+i,tmpy+j)){
                                sum+=GameUtil.MAP_TOP[tmpx+i][tmpy+j]==2?1:0;
                            }
                    if(sum==GameUtil.mp[tmpx][tmpy]){
                        for(int i=-1;i<=1;i++)
                            for(int j=-1;j<=1;j++)
                                if(GameUtil.sure(tmpx+i,tmpy+j) && GameUtil.MAP_TOP[tmpx+i][tmpy+j]==1){
                                    dfs(tmpx+i,tmpy+j);
                                    if(GameUtil.mp[tmpx+i][tmpy+j]==-1) GameUtil.state=2;
                                    GameUtil.MAP_TOP[tmpx+i][tmpy+j]=0;
                                }
                    }
                }else if (tmp >= 1){
                    if(GameUtil.MAP_TOP[tmpx][tmpy]==1) GameUtil.SUM++;
                    else GameUtil.SUM--;
                    GameUtil.MAP_TOP[tmpx][tmpy] = 3 - tmp;
                }
                GameUtil.RIGHT = false;
            }
        }
    }
    void printSelf(Graphics g){     //绘制网格
        mouse();
        g.setColor(Color.blue);
        for(int i=0;i<=GameUtil.MAX_W;i++){
            g.drawLine(GameUtil.OFFSET+i*GameUtil.SQUARE_LENGTH,3*GameUtil.OFFSET,GameUtil.OFFSET+i*GameUtil.SQUARE_LENGTH,3*GameUtil.OFFSET+GameUtil.SQUARE_LENGTH*GameUtil.MAX_H);
        }
        for(int i=0;i<=GameUtil.MAX_H;i++){
            g.drawLine(GameUtil.OFFSET,3*GameUtil.OFFSET+i*GameUtil.SQUARE_LENGTH,GameUtil.OFFSET+GameUtil.SQUARE_LENGTH*GameUtil.MAX_W,3*GameUtil.OFFSET+i*GameUtil.SQUARE_LENGTH);
        }
        for(int i=0;i<GameUtil.MAX_W;i++){
            for(int j=0;j<GameUtil.MAX_H;j++) {
                if(GameUtil.MAP_TOP[i][j]==1){
                    g.drawImage(GameUtil.top,          //打印遮板
                            GameUtil.change_W(i),
                            GameUtil.change_H(j),
                            GameUtil.SQUARE_LENGTH,
                            GameUtil.SQUARE_LENGTH,
                            null);
                }else if(GameUtil.MAP_TOP[i][j]==2) {       //打印旗帜
                    g.drawImage(GameUtil.flag,
                            GameUtil.change_W(i),
                            GameUtil.change_H(j),
                            GameUtil.SQUARE_LENGTH,
                            GameUtil.SQUARE_LENGTH,
                            null);
                } else if(GameUtil.mp[i][j] == -1) {      //打印炸弹
                    g.drawImage(GameUtil.lei,
                            GameUtil.change_W(i) + 2,
                            GameUtil.change_H(j) + 2,
                            GameUtil.SQUARE_LENGTH - 4,
                            GameUtil.SQUARE_LENGTH - 4,
                            null);
                }else{            //打印数字
                    g.drawImage(GameUtil.images[GameUtil.mp[i][j]],
                            GameUtil.change_W(i) + 15,
                            GameUtil.change_H(j) + 10,
                            GameUtil.SQUARE_LENGTH - 30,
                            GameUtil.SQUARE_LENGTH - 20,
                            null);
                }
            }
        }

        //打印笑脸
        g.drawImage(GameUtil.head[GameUtil.state],
                (GameUtil.OFFSET*2+GameUtil.MAX_W*GameUtil.SQUARE_LENGTH-GameUtil.SQUARE_LENGTH)/2,
                GameUtil.OFFSET+15,
                GameUtil.SQUARE_LENGTH-5,
                GameUtil.SQUARE_LENGTH-5,
                null);
        //打印剩余旗子数
        GameUtil.drawWord(g,""+Math.max(GameUtil.bomb_MAX-GameUtil.SUM,0),GameUtil.OFFSET+20,GameUtil.OFFSET*2,Color.BLUE,30);
        //打印时间:
        GameUtil.drawWord(g,""+(GameUtil.END_TIME-GameUtil.START_TIME)/1000,
                GameUtil.OFFSET+(GameUtil.MAX_W-1)*GameUtil.SQUARE_LENGTH,GameUtil.OFFSET*2,Color.BLUE,30);
        if(GameUtil.state==0) GameUtil.END_TIME=System.currentTimeMillis();

    }

    void print_menu(Graphics g) {
        g.drawImage(GameUtil.menu[0],
                (GameUtil.OFFSET*2+GameUtil.MAX_W*GameUtil.SQUARE_LENGTH-3*GameUtil.SQUARE_LENGTH)/2,
                4*GameUtil.OFFSET,
                3*GameUtil.SQUARE_LENGTH,
                2*GameUtil.SQUARE_LENGTH,
                null);
        g.drawImage(GameUtil.menu[1],
                (GameUtil.OFFSET*2+GameUtil.MAX_W*GameUtil.SQUARE_LENGTH-3*GameUtil.SQUARE_LENGTH)/2,
                7*GameUtil.OFFSET,
                3*GameUtil.SQUARE_LENGTH,
                2*GameUtil.SQUARE_LENGTH,
                null);
        g.drawImage(GameUtil.menu[2],
                (GameUtil.OFFSET*2+GameUtil.MAX_W*GameUtil.SQUARE_LENGTH-3*GameUtil.SQUARE_LENGTH)/2,
                10*GameUtil.OFFSET,
                3*GameUtil.SQUARE_LENGTH,
                2*GameUtil.SQUARE_LENGTH,
                null);
        GameUtil.drawWord(g,"单击滚轮重新选择难度",GameUtil.MAX_W*GameUtil.SQUARE_LENGTH-GameUtil.SQUARE_LENGTH*4,GameUtil.SQUARE_LENGTH+GameUtil.SQUARE_LENGTH*GameUtil.MAX_H,Color.BLUE,20);
    }
    void Plug_in(){
        for(int i=0;i<GameUtil.MAX_W;i++)
            for(int j=0;j<GameUtil.MAX_H;j++)
                if(GameUtil.mp[i][j]==-1&&GameUtil.MAP_TOP[i][j]==1){
                    GameUtil.MAP_TOP[i][j]=2;           //找到未开为标记的雷，将其标记
                    return;
                }
    }
}

